﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using System.Diagnostics;

namespace Projeto3D 
{
    class Menu : SceneBase
    {
        InputController input;
        Objeto2D botaoPlay, read, read2, read3, ready, ready2, ready3, scores, ok, cancel, joinGame, joinCredits, joinExit, titulo, titulo2, subtitulo, credits, exit, pressA, pressC, pressEsc;
        int cont;
        Texture2D texturaMenu;



        public override void start() //Inicia os comandos do jogo, carregando todos os itens;
        {
            
            cont = 1;

            texturaMenu = (Game1.self.Content.Load<Texture2D>("fundoMenu"));
            
            titulo = new Objeto2D(Game1.self.Content.Load<Texture2D>("titulo"));
            titulo.posicao.X = 370;
            titulo.posicao.Y = 65;

            titulo2 = new Objeto2D(Game1.self.Content.Load<Texture2D>("titulo2"));
            titulo2.posicao.X = 370;
            titulo2.posicao.Y = 130;

            subtitulo = new Objeto2D(Game1.self.Content.Load<Texture2D>("subtitulo"));
            subtitulo.posicao.X = 370;
            subtitulo.posicao.Y = 207;
                                  
            botaoPlay = new Objeto2D(Game1.self.Content.Load<Texture2D>("Player1"));
            botaoPlay.posicao.X = 110;
            botaoPlay.posicao.Y = 305;

            credits = new Objeto2D(Game1.self.Content.Load<Texture2D>("credits"));
            credits.posicao.X = 350;
            credits.posicao.Y = 305;

            exit = new Objeto2D(Game1.self.Content.Load<Texture2D>("exit"));
            exit.posicao.X = 590;
            exit.posicao.Y = 305;

            joinGame = new Objeto2D(Game1.self.Content.Load<Texture2D>("joinGame"));
            joinGame.posicao.X = 110;
            joinGame.posicao.Y = 380;
            
            joinCredits = new Objeto2D(Game1.self.Content.Load<Texture2D>("joinCredits"));
            joinCredits.posicao.X = 350;
            joinCredits.posicao.Y = 380;
            
            joinExit = new Objeto2D(Game1.self.Content.Load<Texture2D>("joinExit"));
            joinExit.posicao.X = 590;
            joinExit.posicao.Y = 380;

            scores = new Objeto2D(Game1.self.Content.Load<Texture2D>("(y)"));
            scores.posicao.X = 110;
            scores.posicao.Y = 520;

            ok = new Objeto2D(Game1.self.Content.Load<Texture2D>("ok"));
            ok.posicao.X = 360;
            ok.posicao.Y = 520;
            
            cancel = new Objeto2D(Game1.self.Content.Load<Texture2D>("(B)"));
            cancel.posicao.X = 590;
            cancel.posicao.Y = 530;

            read = new Objeto2D(Game1.self.Content.Load<Texture2D>("read"));
            read.posicao.X = 110;
            read.posicao.Y = 355;
            read.visible = false;

            pressA = new Objeto2D(Game1.self.Content.Load<Texture2D>("press(A)"));
            pressA.posicao.X = 110;
            pressA.posicao.Y = 400;
            pressA.visible = false;


            read2 = new Objeto2D(Game1.self.Content.Load<Texture2D>("read"));
            read2.posicao.X = 350;
            read2.posicao.Y = 355;
            read2.visible = false;

            pressC = new Objeto2D(Game1.self.Content.Load<Texture2D>("press(C)"));
            pressC.posicao.X = 350;
            pressC.posicao.Y = 400;
            pressC.visible = false;

            read3 = new Objeto2D(Game1.self.Content.Load<Texture2D>("read"));
            read3.posicao.X = 590;
            read3.posicao.Y = 355;
            read3.visible = false;

            pressEsc = new Objeto2D(Game1.self.Content.Load<Texture2D>("press(Esc)"));
            pressEsc.posicao.X = 590;
            pressEsc.posicao.Y = 400;
            pressEsc.visible = false;

            

            this.input = new InputController();
        }

        public override void terminate() //duvida?
        {
            this.input = null;
        }

        public override void update(GameTime gameTime) // Atualização de todos os itens da classe;
        {
            cont += 1;

            if (cont > 12)
            {
                cont = 1;
            }

            if (cont == 5)  // se o contador for igual a 5 ou nos casos abaixo ocorrerá a troca de cores dos textos expecificos
            {
                titulo.cor = Color.Aqua;
                titulo2.cor = Color.White;
                subtitulo.cor = Color.White;
                pressA.cor = Color.Aqua;
                pressC.cor = Color.Aqua;
                pressEsc.cor = Color.Aqua;
            }
            if (cont ==12 )
            {
                titulo.cor = Color.Pink;
                titulo2.cor = Color.LightSlateGray;
                subtitulo.cor = Color.Aqua;
                pressA.cor = Color.Pink;
                pressC.cor = Color.Pink;
                pressEsc.cor = Color.Pink;
            }
            else if (cont == 19)
            {
                titulo.cor = Color.LightSkyBlue;
                titulo2.cor = Color.Purple;
                subtitulo.cor = Color.Yellow;
                pressA.cor = Color.LightSkyBlue;
                pressC.cor = Color.LightSkyBlue;
                pressEsc.cor = Color.LightSkyBlue;
            }
            else if (cont == 26)
            {
                titulo.cor = Color.Purple;
                titulo2.cor = Color.MediumBlue;
                subtitulo.cor = Color.Coral;
                pressA.cor = Color.Purple;
                pressC.cor = Color.Purple;
                pressEsc.cor = Color.Purple;
            }

                else if (cont == 33)
            {
                titulo.cor = Color.LightGreen;
                titulo2.cor = Color.Silver;
                subtitulo.cor = Color.Salmon;
                pressA.cor = Color.LightGreen;
                pressC.cor = Color.LightGreen;
                pressEsc.cor = Color.LightGreen;
            }


            this.input.getState();




            if (this.input.isKeyJustPressed(Keys.Enter)) // se o botão sugerido for apertado, os itens expecificos que estavam aparecendo na tela ficaram invisiveis, e os que estavam invisiveis ficarão visiveis.
            {
                joinGame.visible = false;
                joinCredits.visible = false;
                joinExit.visible = false;

                read.visible = true;
                pressA.visible = true;

                read2.visible = true;
                pressC.visible = true;

                read3.visible = true;
                pressEsc.visible = true;


            }

            
             if ((joinGame.visible == false)  || (joinCredits.visible == false) || (joinExit.visible == false )) // se os itens com join no nome estiverem invisiveis, somente nesse momento a tecla as tecla (A), (C), e (ESC) serão executadas.
            {

                if (this.input.isKeyJustPressed(Keys.Escape))
                {
                    Process.GetCurrentProcess().Kill(); // comando para finalizar a execução do programa, função exit;
                }
               
                

                if (this.input.isKeyJustPressed(Keys.C))
                {
                    SceneManager.setScene(new Creditos());// comando de troca de tela de uma classe para outra, nesse caso da classe menu para creditos;
                }

                else if (this.input.isKeyJustPressed(Keys.A))
                {
                    SceneManager.setScene(new Level()); // comando de troca de tela de uma classe para outra, nesse caso da classe menu para Level;
                }

                
                 
             }
                                 
                
            }

           

        
            
        
        public override void draw(SpriteBatch spriteBatch) // função que desenha todos os itens, no jogo.
        {
            spriteBatch.Begin();
           
            spriteBatch.Draw(texturaMenu, new Vector2(0, 0), Color.White);
            botaoPlay.Draw(spriteBatch);
            titulo.Draw(spriteBatch);
            titulo2.Draw(spriteBatch);
            subtitulo.Draw(spriteBatch);
            credits.Draw(spriteBatch);
            exit.Draw(spriteBatch);
            joinGame.Draw(spriteBatch);
            joinCredits.Draw(spriteBatch);
            joinExit.Draw(spriteBatch);
            scores.Draw(spriteBatch);
            ok.Draw(spriteBatch);
            cancel.Draw(spriteBatch);
            read.Draw(spriteBatch);
            read2.Draw(spriteBatch);
            read3.Draw(spriteBatch);
            pressA.Draw(spriteBatch);
            pressC.Draw(spriteBatch);
            pressEsc.Draw(spriteBatch);

            spriteBatch.End();


        }


    }

}
